#ifndef UTILS_H_INCLUDED
#define UTILS_H_INCLUDED

#include <list>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <fstream>
#include <iostream>

using namespace std;


#define TOKENS " !\\^?,:¿¡/$&'();.{}+[]*\"-_|ªº1234567890=%#@<>\r\t"
#define TOKENS1 "abcdefghijlkmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚáéíóúüÜàèìòùÀÈÌÒÙÇç"

#define YA_EXISTE 0
#define NO_HAY_LUGAR 0
#define REG_OCUPADO 'o'
#define REG_BORRADO 'b'

typedef std::string tDirectorio, tArchivo, tBigrama;
typedef std::list<tArchivo> tListaArch;
typedef unsigned int idBigrama,tOffset,claseArch,idTermino,idDir,idArch;
typedef std::list<tDirectorio> tListaDirs;
typedef std::map<std::string,unsigned int> tMapTerminos;
typedef std::set<idTermino> tListaTerminos;
typedef std::set<std::string> tListaBigrama;
typedef std::map<tBigrama,tListaTerminos*> tMapBigramas;
typedef std::map<tBigrama,tOffset> tIndiceBigramas;
typedef std::map<tBigrama,idBigrama> tBigrama_ID;//para obtener el ID de un bigrama dado

typedef enum {
    EST_OK = 0,
    EST_EXISTE_ARCH = 1, // Los archivos ya fueron creados
    EST_ERR_CR_ARCH = 2, // Error en creacion de archivo
    EST_ERR_AP_ARCH = 3, // Error en apertura de archivo
    EST_ERR_AC_ARCH = 4  // Error en acceso a archivo
} tEstado;

typedef enum {
    COM_CONS_RANQUEADA = 0,
    COM_CONS_COMODIN = 1,
    COM_AGR_DIR = 2,
    COM_ELIM_DIR = 3,
    COM_DESCONOCIDO = 4,
    COM_DIR_INEXISTENTE = 5

} tComando;
//sergio
typedef struct
{
	unsigned int id;
	unsigned int offset;
}tNodoMapDirectorios;

typedef struct
{
	unsigned int idArchivo;
	unsigned int idDir;
	unsigned int offset;
}tNodoMultimapFicherosA;

typedef struct
{
	unsigned int idDir;
	string nombre;
}tNodoMapFicherosC;

typedef enum {
    AUDIO= 0,
    DOCUMENT = 1,
    SOURCE = 2,
    PHOTO = 3,
} tCatalogo;

typedef std::map<std::string, tNodoMapDirectorios> tMapRutas;
typedef std::map<unsigned int, tNodoMapFicherosC> tMapFicherosC;
typedef std::multimap<unsigned int, unsigned int> tMultimapFicherosB;
typedef std::multimap<std::string, tNodoMultimapFicherosA> tMultimapFicherosA;
typedef std::multimap<unsigned short int, unsigned int> tMultimapLibres;

#endif // TIPOS_H_INCLUDED
